'use strict';

var values = require('lodash/values');

/**
 * The guy knowing all configured element templates.
 *
 * This registry won't validate. Use the {@link Validator}
 * to verify a template is valid prior to adding it to
 * this registry.
 */
function ElementTemplates() {

    this._templates = {};

    /**
     * Sets the known element templates.
     *
     * @param {Array<TemplateDescriptor>} descriptors
     *
     * @return {ElementTemplates}
     */
    this.set = function (descriptors) {

        var templates = this._templates = {};

        descriptors.forEach(function (descriptor) {
            templates[descriptor.id] = descriptor;
        });

        return this;
    };

    /**
     * Get template descriptor with given id.
     *
     * @param {String} id
     *
     * @return {TemplateDescriptor}
     */
    this.get = function (id) {
        return this._templates[id];
    };

    /**
     * Return all known template descriptors.
     *
     * @return {Array<TemplateDescriptor>}
     */
    this.getAll = function () {
        return values(this._templates);
    };

}

module.exports = ElementTemplates;